/**
 * 在这里定义和用户相关的路由处理函数，供 /router/user.js 模块进行调用
 */
// 导入数据库操作模块
const db = require('../db/index');

const bcrypt = require('bcryptjs');

// 用这个包来生成 Token 字符串
const jwt = require('jsonwebtoken')

const config = require('../config');

// 注册用户的处理函数
exports.regUser = (req, res) => {
    const userinfo = req.body;
    console.log(userinfo)
    if (!userinfo.username || !userinfo.password) {
        return res.cc('用户名或密码不能为空');
    }
    userinfo.password = bcrypt.hashSync(userinfo.password, 10);
    const sql = 'select * from ev_users where username=?';
    db.query(sql, [userinfo.username], function(err, results) {
        // sql语句执行失败
        if (err) {
            return res.cc(err);
        }
        if (results.length > 0) {
            return res.cc('用户名已被占用');
        }
        const sql = 'insert into ev_users set ?';
        db.query(sql, { username: userinfo.username, password: userinfo.password }, function(err, results) {
            if (err) {
                return res.cc(err)
            }
            // SQL 语句执行成功，但影响行数不为 1
            if (results.affectedRows !== 1) {
                return res.cc('注册用户失败，请稍后再试！');
            }
            // 注册成功
            res.send({ status: 0, message: '注册成功！' })
        })
    })
}

// 登录的处理函数
exports.login = (req, res) => {
    const userinfo = req.body;
    if (!userinfo.username || !userinfo.password) {
        return res.cc('用户名或密码不能为空');
    }
    const sql = 'select * from ev_users where username=?';
    db.query(sql, [userinfo.username], (err, results) => {
        // sql语句执行失败
        if (err) {
            return res.cc(err);
        }
        if (results.length !== 1) {
            res.cc('用户名不存在');
        }
        const compareResult = bcrypt.compareSync(userinfo.password, results[0].password);
        if (!compareResult) {
            res.cc('密码错误');
        }
        // TODO：登录成功，生成 Token 字符串
        const user = {...results[0], password: '', user_pic: '' };
        const tokenStr = jwt.sign(user, config.jwtSecretKey, {
            expiresIn: '10h'
        })
        res.send({
            status: 0,
            message: '登录成功',
            tokenStr: tokenStr
        })
    });
}